package cn.hutool.poi.excel.cell.data;

import java.util.LinkedList;
import java.util.List;

/**
 * 表格数据类
 * @author 徐明龙 XuMingLong 2021-11-16
 */
public class TableData {

	/**
	 * 当前表格数据在模版的开始列的下标 （从0开始）
	 * @author 徐明龙 XuMingLong 2021-11-16
	 */
	private int beginX = 0 ;

	/**
	 * 当前表格数据在模版的开始行的下标 （从0开始）
	 * @author 徐明龙 XuMingLong 2021-11-16
	 */
	private int beginY = 0 ;

	/**
	 * 二维的表的数据
	 * @author 徐明龙 XuMingLong 2021-11-16
	 */
	private List<List<?>> data;

	/**
	 * 默认的构造方法
	 * @author 徐明龙 XuMingLong 2021-11-16
	 */
	public TableData() {
		this(0,0);
	}

	/**
	 * 指定开始行和列的构造方法
	 * @author 徐明龙 XuMingLong 2021-11-16
	 * @param beginX 列的下标，从0开始，如果小于0则强制覆盖为0
	 * @param beginY 行的下标，从0开始，如果小于0则强制覆盖为0
	 */
	public TableData(int beginX, int beginY) {
		this.beginX = beginX;
		this.beginY = beginY;
		this.data = new LinkedList<>();
	}

	/**
	 * 指定开始列、行和二维表数据的构造方法
	 * @author 徐明龙 XuMingLong 2021-11-16
	 * @param beginX 列的下标，从0开始，如果小于0则强制覆盖为0
	 * @param beginY 行的下标，从0开始，如果小于0则强制覆盖为0
	 * @param data 二维表数据
	 */
	public TableData(int beginX, int beginY, List<List<?>> data) {
		this.beginX = beginX;
		this.beginY = beginY;
		this.data = data;
	}

	/**
	 * 获取当前表格数据在模版的开始列（从0开始）
	 * @author 徐明龙 XuMingLong 2021-11-16
	 * @return int 列的下标
	 */
	public int getBeginX() {
		return beginX;
	}

	/**
	 * 设置当前表格数据在模版的开始列（从0开始）
	 * @author 徐明龙 XuMingLong 2021-11-16
	 * @param beginX 列的下标，从0开始，如果小于0则强制覆盖为0
	 * @return void
	 */
	public void setBeginX(int beginX) {
		if(beginX >=0){
			this.beginX = beginX;
		}else{
			this.beginX = 0;
		}
	}

	/**
	 * 获取当前表格数据在模版的开始行 （从0开始）
	 * @author 徐明龙 XuMingLong 2021-11-16
	 * @return int 行的下标
	 */
	public int getBeginY() {
		return beginY;
	}

	/**
	 * 设置当前表格数据在模版的开始行 （从0开始）
	 * @author 徐明龙 XuMingLong 2021-11-16
	 * @param beginY 行的下标，从0开始，如果小于0则强制覆盖为0
	 * @return void
	 */
	public void setBeginY(int beginY) {
		if(beginY>=0){
			this.beginY = beginY;
		}else{
			this.beginY = 0;
		}
	}

	/**
	 * 获取表格数据
	 * @author 徐明龙 XuMingLong 2021-11-16
	 * @return java.util.List<java.util.List<?>> 返回二维表格的数据
	 */
	public List<List<?>> getData() {
		return data;
	}

	/**
	 * 设置表格数据
	 * @author 徐明龙 XuMingLong 2021-11-16
	 * @param data 设置二维表格的数据
	 * @return void
	 */
	public void setData(List<List<?>> data) {
		this.data = data;
	}

	/**
	 * 增加行数据
	 * @author 徐明龙 XuMingLong 2021-11-16
	 * @param rowData 行数据
	 * @return void
	 */
	public void addRow(List<?> rowData){
		this.data.add(rowData);
	}

}
